//矩阵中战斗力最弱的 K 行
/*给你一个大小为 m * n 的矩阵 mat，矩阵由若干军人和平民组成，分别用 1 和 0 表示。

请你返回矩阵中战斗力最弱的 k 行的索引，按从最弱到最强排序。

如果第 i 行的军人数量少于第 j 行，或者两行军人数量相同但 i 小于 j，那么我们认为第 i 行的战斗力比第 j 行弱。

军人 总是 排在一行中的靠前位置，也就是说 1 总是出现在 0 之前。*/
struct com {
    bool operator()(const pair<int, int>& x, const pair<int, int>& y) const {
        if (x.first == y.first) {
            return x.second < y.second;
        }
        return x.first < y.first;
    }
};
class Solution {
public:
    vector<int> kWeakestRows(vector<vector<int>>& mat, int k) {
        set<pair<int, int>, com> hash;
        for (int i = 0; i < mat.size(); i++) {
            int count = 0;
            for (auto& num : mat[i]) {
                if (num)
                    count++;
                else
                    break;
            }
            hash.insert({count, i});
        }
        vector<int> ret;
        int floag = 0;
        for (auto& [f, s] : hash) {
            if (floag < k)
                ret.push_back(s);
            else
                break;
            floag++;
        }
        return ret;
    }
};

//分割平衡字符串
/*平衡字符串 中，'L' 和 'R' 字符的数量是相同的。

给你一个平衡字符串 s，请你将它分割成尽可能多的子字符串，并满足：

每个子字符串都是平衡字符串。
返回可以通过分割得到的平衡字符串的 最大数量 。
*/
class Solution {
public:
    int balancedStringSplit(string s) {
        int L_count = 0;
        int R_count = 0;
        int count = 0;
        for (auto i : s) {
            if (i == 'L')
                L_count++;
            else
                R_count++;
            if (L_count == R_count)
                count++;
        }
        return count;
    }
};